package pruebas;

import modelo.Posicion;
import modelo.Barco;
import modelo.Lancha;
import modelo.Mina;

import java.util.Iterator;
import java.util.ArrayList;

import junit.framework.TestCase;
import org.junit.Test;
import org.junit.Before;
import org.junit.After;

import excepciones.CantidadDePosicionesIncorrectasExcepcion;

public class PosicionTest extends TestCase {
	private Posicion posicion;
	private int fila = 2;
	private int columna = 3;
	
	@Before
	public void setUp() throws Exception {
		super.setUp();
		this.posicion = new Posicion(fila, columna);
	}
	
	@After
	public void tearDown() throws Exception {
		super.tearDown();
		this.posicion = null;
	}
	
	@Test
	public void testObtenerFila() {
		int unaFila = posicion.getFila();
		assertSame(fila, unaFila);
	}
	
	@Test
	public void testObtenerColumna() {
		int unaColumna = posicion.getColumna();
		assertSame(columna, unaColumna);
	}
	
	@Test
	public void testObtenerBarcos() {
		Barco barco = null;
		ArrayList<Posicion> posiciones = new ArrayList<Posicion>();
		Posicion posicionB = new Posicion(1, 1);
		
		posiciones.add(posicion);
		posiciones.add(posicionB);

    	try {
    		barco = new Lancha(posiciones, null);
    	}
    	catch (CantidadDePosicionesIncorrectasExcepcion unError) {
    		unError.printStackTrace();
    	}
    	
		Iterator<Barco> iteradorDeBarcos = posicion.getBarcos();
				
		assertSame(iteradorDeBarcos.next(), barco);		
	}
	
	@Test
	public void testObtenerBarcosSinBarcosAgregados() {
		Iterator<Barco> iteradorDeBarcos = posicion.getBarcos();
		assertFalse("ERROR: Se obtienen barcos sin barcos asignados.", iteradorDeBarcos.hasNext());
	}
	
	@Test
	public void testObtenerMinasSinMinasAsignadas() {
		Mina mina = posicion.getMina();
		assertFalse(mina!=null);
	}
}
